﻿using System.Collections.Generic;
using CTS.Com.Domain.Helper;
using CTS.Data.APStorageFiles.Domain.Utils;
using CTS.Data.Domain.Constants;
using CTS.Data.MACompanyInfos.Domain.Utils;
using CTS.W._150101.Models.Domain.Model.Admin.Settings.Info;
using CTS.W._150101.Models.Domain.Object.Admin.CompanyInfos;

namespace CTS.W._150101.Models.Domain.Logic.Admin.Settings.Info
{
    /// <summary>
    /// FilterLogic
    /// </summary>
    public class FilterLogic
    {
        #region Execute Method
        /// <summary>
        /// Xử lý filter.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        public FilterDataModel Execute(FilterDataModel inputObject)
        {
            // Kiểm tra thông tin
            Check(inputObject);
            // Lấy thông tin
            var resultObject = GetInfo(inputObject);
            // Kết quả trả về
            return resultObject;
        }
        #endregion

        #region Private Method
        /// <summary>
        /// Kiểm tra thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        private void Check(FilterDataModel inputObject)
        {
        }

        /// <summary>
        /// Lấy thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        private FilterDataModel GetInfo(FilterDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var getResult = new FilterDataModel();
            // Map dữ liệu
            DataHelper.CopyObject(inputObject, getResult);
            // Lấy danh sách dữ liệu
            var listData = GetListData();
            // Gán giá trị trả về
            getResult.ListData = listData;
            // Kết quả trả về
            return getResult;
        }

        /// <summary>
        /// Lấy danh sách dữ liệu
        /// </summary>
        private IList<InfoObject> GetListData()
        {
            // Khởi tạo biến cục bộ
            var listResult = new List<InfoObject>();
            var companyCom = new CompanyCom();
            var storageFileCom = new StorageFileCom();
            // Lấy danh sách dữ liệu
            var listData = companyCom.GetListModify(false);
            // Duyệt danh sách dữ liệu
            foreach (var data in listData) {
                if (data.InfoType == DataLogics.IT_IMAGE) {
                    data.InfoValue = storageFileCom.GenFileCd(data.InfoValue);
                }
                listResult.Add(DataHelper.CopyObject<InfoObject>(data));
            }
            // Kết quả trả về
            return listResult;
        }
        #endregion
    }
}
